package com.zcc.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Date;

//保存用户上一次访问的时间，用于再次访问时提供身份验证
public class CookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器把用户访问的时间封装为一个对象，当再次访问时，用户携带这个对象，服务器就能验明身份

        //解决乱码
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");

        //创建一个输出用的对象，对象名为out，和JSP关联
        PrintWriter out = resp.getWriter();

        //由于服务器需要验证客户身份，所以用户要携带证明，也就是Cookie，服务器从客户端获取Cookie
        //Cookie可能存在多个，所以getCookie返回一个数组
        Cookie[] cookies = req.getCookies();

        //获取所有Cookie的key，用于判断是否有符合条件的
        String[] strings = new String[cookies.length];
        String[] values = new String[cookies.length];
        for (int i = 0; i < cookies.length; i++) {
            strings[i] = cookies[i].getName();
            values[i] = cookies[i].getValue();
        }
        //判断Cookie是否为空，也就是曾经有没有访问过，清除缓存等操作就相当于复原，变成初次访问
        if (Arrays.asList(strings).contains("lastLoginTime")||Arrays.asList(strings).contains("name")) {
            System.out.println(Arrays.toString(strings)+Arrays.toString(values));
            out.println("上一次访问时间为：");
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("lastLoginTime")) {
                    long lastLoginTime = Long.parseLong(cookie.getValue());//获取Cookie的value
                    Date date = new Date(lastLoginTime);
                    out.println(date.toLocaleString());
                }
            }
        }else {
            out.println("这是初次访问");
        }

        //服务器给客户端响应一个Cookie

        //当客户端访问后，此时客户端已经证明身份，服务器把Cookie给客户端，用于以后访问时作为证明
        //建立一个Cookie对象需要赋值一个键值对，用于信息获取
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        Cookie cookie1 = new Cookie("name", "郑冲冲");
        //给Cookie增加一个有效期，长达一天
        //即使关闭浏览器，也就是结束会话，再次进行会话依旧会生效
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
        resp.addCookie(cookie1);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
